package 时间类

import (
	"time"
)

const (
	minDuration X时长 = -1 << 63
	maxDuration X时长 = 1<<63 - 1
)

// MaxValue returns a Carbon instance for the greatest supported date.
// 返回 Carbon 的最大值
func X取最大时间() *Carbon {
	return X创建(time.Date(9999, time.December, 31, 23, 59, 59, 999999999, time.UTC))
}

// MinValue returns a Carbon instance for the lowest supported date.
// 返回 Carbon 的最小值
func X取最小时间() *Carbon {
	return X创建(time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC))
}

// MaxDuration returns the maximum duration value.
// 返回 Duration 的最大值
func X取最大时长() X时长 {
	return maxDuration
}

// MinDuration returns the minimum duration value.
// 返回 Duration 的最小值
func X取最小时长() X时长 {
	return minDuration
}

// Max returns the maximum Carbon instance from the given Carbon instance.
// 返回最大的 Carbon 实例
func X取最大实例(c1 *Carbon, c2 ...*Carbon) (c *Carbon) {
	c = c1
	if len(c2) == 0 {
		return
	}
	for i := range c2 {
		if c.X是否为无效时间() || c2[i].X是否为无效时间() {
			return nil
		}
		if c2[i].X是否大于等于(c) {
			c = c2[i]
		}
	}
	return
}

// Min returns the minimum Carbon instance from the given Carbon instance.
// 返回最小的 Carbon 实例
func X取最小实例(c1 *Carbon, c2 ...*Carbon) (c *Carbon) {
	c = c1
	if len(c2) == 0 {
		return
	}
	for i := range c2 {
		if c.X是否为无效时间() || c2[i].X是否为无效时间() {
			return nil
		}
		if c2[i].X是否小于等于(c) {
			c = c2[i]
		}
	}
	return
}

// Closest returns the closest Carbon instance from the given Carbon instance.
// 返回离给定 carbon 实例最近的 Carbon 实例
func (c *Carbon) X取最接近实例(c1 *Carbon, c2 *Carbon) *Carbon {
	if c.X是否为无效时间() || c1.X是否为无效时间() || c2.X是否为无效时间() {
		return nil
	}
	if c.X取相差秒并取绝对值(c1) < c.X取相差秒并取绝对值(c2) {
		return c1
	}
	return c2
}

// Farthest returns the farthest Carbon instance from the given Carbon instance.
// 返回离给定 carbon 实例最远的 Carbon 实例
func (c *Carbon) X取最远实例(c1 *Carbon, c2 *Carbon) *Carbon {
	if c.X是否为无效时间() || c1.X是否为无效时间() || c2.X是否为无效时间() {
		return nil
	}
	if c.X取相差秒并取绝对值(c1) > c.X取相差秒并取绝对值(c2) {
		return c1
	}
	return c2
}
